#include <stdio.h>
#include <string.h>
#include "STACK.h"

/**
 * Program 4.3 Infix-to-postfix conversion
 * ----------------------------------------
 * 借助栈结构实现转换
 * 思路：
 * 循环读取输入，对每个读到的字符做如下处理：
 * - 当遇见左括号时，跳过，继续处理下一个字符；
 * - 当遇见一个数时，直接输出；
 * - 当遇见一个操作符时，入栈；
 * - 当遇见一个右括号时，出栈并输出返回的栈顶元素；
 * ----------------------------------------
 * 编译：
 * gcc -o infix2Postfix infix2Postfix.c ArrayStack.c
 * gcc -o infix2Postfix infix2Postfix.c ListStack.c
 * ----------------------------------------
 * 运行：
 * ./infix2Postfix '(5*(((9+8)*(4*6))+7))'
 */
int main(int argc, char **argv) {
    char *a = argv[1];
    int maxN = strlen(a);
    int i;

    STACKinit(maxN);

    for (i = 0; i < maxN; i++) {
        if (a[i] == '(') {
            continue;
        }
        if (a[i] == ')') {
            printf("%c ", STACKpop());
        }
        if (a[i] == '+' || a[i] == '*') {
            STACKpush(a[i]);
        }
        if (a[i] >= '0' && a[i] <= '9') {
            printf("%c ", a[i]);
        }
    }
    printf("\n");


    return 0;
}